package jwcb.hire.admin.api.map.feign;

import jwcb.hire.admin.api.map.domain.dto.CityLocationReqDto;
import jwcb.hire.admin.api.map.domain.dto.PlaceSearchReqDto;
import jwcb.hire.admin.api.map.domain.vo.RegionCityVO;
import jwcb.hire.admin.api.map.domain.vo.RegionVO;
import jwcb.hire.admin.api.map.domain.vo.SearchPoiVO;
import jwcb.hire.common.domain.domain.R;
import jwcb.hire.common.domain.domain.vo.BasePageVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;
import java.util.Map;

/**
 * 地图服务相关远程调用api
 */

@FeignClient(contextId="mapFeignClient",value="jwcb-admin")
public interface MapFeignClient {

    /**
     * 城市列表查询
     * @return 城市列表信息
     */
    @GetMapping("/map/city_list")
    R<List<RegionVO>> getCityList();


    /**
     * 城市拼音归类查询
     * @return 城市字母与城市列表的哈希
     */
    @GetMapping("/map/city_pinyin_list")
    R<Map<String,List<RegionVO>>> getCityPyList();


    /**
     * 根据父级区域ID获取子集区域列表
     * @param parentId 父级区域id
     * @return 子集区域列表
     */
    @GetMapping("/map/region_children_list")
    R<List<RegionVO>> getRegionChildrenList(@RequestParam("parentId") Long parentId);


    /**
     * 获取热门城市列表
     * @return 热门城市列表
     */
    @GetMapping("/map/city_hot_list")
    R<List<RegionVO>> getCityHotList();


    /**
     * 根据地点搜索
     * @param placeSearchReqDto 搜索条件
     * @return 搜索结果
     */
    @PostMapping("/map/search")
    R<BasePageVO<SearchPoiVO>> searchSuggestOnMap(@RequestBody @Validated PlaceSearchReqDto placeSearchReqDto);


    /**
     * 根据经纬度定位城市
     * @param cityLocationReqDto 定位信息
     * @return 城市信息
     */
    @PostMapping("/map/city/location")
    R<RegionCityVO> getCityLocation(@RequestBody @Validated CityLocationReqDto cityLocationReqDto);
}
